Deal with events from wrong display
authorMatthias Clasen <mclasen@redhat.com>
Mon, 15 Jun 2015 23:46:33 +0000 (19:46 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 15 Jun 2015 23:50:02 +0000 (19:50 -0400)
GtkInspector is opening a separate display connection, which makes
it more likely that gtk_get_current_event() returns an event from
the "wrong" display.

gtk/gtkmenu.c
gtk/gtkmenubutton.c

index 7219953acc6d2dfb6489c84046bfacf3279d5255..21a737ef143835bb38ae3022b730a553ed390ab8 100644 (file)
@@ -1535,20 +1535,24 @@ gtk_menu_popup_for_device (GtkMenu             *menu,
   gboolean grab_keyboard;
   GtkWidget *parent_toplevel;
   GdkDevice *keyboard, *pointer, *source_device = NULL;
+  GdkDisplay *display;
 
   g_return_if_fail (GTK_IS_MENU (menu));
   g_return_if_fail (device == NULL || GDK_IS_DEVICE (device));
 
+  display = gtk_widget_get_display (GTK_WIDGET (menu));
+
   if (device == NULL)
     device = gtk_get_current_event_device ();
 
+  if (device && gdk_device_get_display (device) != display)
+    device = NULL;
+
   if (device == NULL)
     {
-      GdkDisplay *display;
       GdkDeviceManager *device_manager;
       GList *devices;
 
-      display = gtk_widget_get_display (GTK_WIDGET (menu));
       device_manager = gdk_display_get_device_manager (display);
       devices = gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_MASTER);
 
index 17c822b38429348357f519567c5e3e0fd5fc8484..2126087dd4c10c883a0826597830afcd4ce624f8 100644 (file)
@@ -398,7 +398,8 @@ popup_menu (GtkMenuButton *menu_button,
         break;
   }
 
-  if (event)
+  if (event != NULL &&
+      gdk_event_get_screen (event) == gtk_widget_get_screen (GTK_WIDGET (menu_button)))
     {
       device = gdk_event_get_device (event);
       gdk_event_get_button (event, &button);